#include <bits/stdc++.h>
using namespace std;
struct node{
	int v,idx;
}b[8010];
int n,q,a[8010];
bool cmp(const node &x,const node &y){
	return x.v==y.v?x.idx<y.idx:x.v<y.v;
}
int findhyt(int x,int y){
	int l=1,r=n;
	while(l<=r){
		int mid=(l+r)/2;
		if(b[mid].v<x||(b[mid].v==x&&b[mid].idx<y)) l=mid+1;
		else r=mid-1;
	}
	return l;
}
int main(){
	freopen("sort.in","r",stdin);
	freopen("sort.out","w",stdout);
	cin>>n>>q;
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
		b[i].v=a[i];
		b[i].idx=i;
	}
	sort(b+1,b+n+1,cmp);
	for(int i=1;i<=q;i++){
		int opt;
		scanf("%d",&opt);
		if(opt==1){
			int s,t;
			scanf("%d%d",&s,&t);
			int j=findhyt(a[s],s);
			b[j].v=t;
			a[s]=t;
			for( ;j<n;j++){
				if(b[j].v>b[j+1].v||(b[j].v==b[j+1].v&&b[j].idx>b[j+1].idx)) swap(b[j],b[j+1]);
				else break;
			}
			for( ;j>1;j--){
				if(b[j].v<b[j-1].v||(b[j].v==b[j-1].v&&b[j].idx<b[j-1].idx)) swap(b[j],b[j-1]);
				else break;
			}
		}
		if(opt==2){
			int c;
			scanf("%d",&c);
			printf("%d\n",findhyt(a[c],c));
		}
	}
return 0;
}
/*
3 4
3 2 1
2 3
1 3 2
2 2
2 3
*/
